/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.form.editors2;
import org.openide.explorer.propertysheet.editors.*;
import java.beans.*;
import java.awt.*;
import java.util.HashMap;
import javax.swing.*;
/**
*
* @author Pavel Buzek
* @version
*/
public class CursorEditor extends PropertyEditorSupport implements EnhancedPropertyEditor, org.openide.explorer.propertysheet.editors.XMLPropertyEditor {
/**
* @associates Integer
*/
private static HashMap CURSOR_TYPES = new HashMap ();
/**
* @associates String
*/
private static HashMap CURSOR_CONSTANTS = new HashMap ();
static {
CURSOR_TYPES.put (new Cursor (Cursor.CROSSHAIR_CURSOR).getName(), new Integer (Cursor.CROSSHAIR_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.DEFAULT_CURSOR).getName(), new Integer (Cursor.DEFAULT_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.E_RESIZE_CURSOR).getName(), new Integer (Cursor.E_RESIZE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.HAND_CURSOR).getName(), new Integer (Cursor.HAND_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.MOVE_CURSOR).getName(), new Integer (Cursor.MOVE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.N_RESIZE_CURSOR).getName(), new Integer (Cursor.N_RESIZE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.NE_RESIZE_CURSOR).getName(), new Integer (Cursor.NE_RESIZE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.NW_RESIZE_CURSOR).getName(), new Integer (Cursor.NW_RESIZE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.S_RESIZE_CURSOR).getName(), new Integer (Cursor.S_RESIZE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.SE_RESIZE_CURSOR).getName(), new Integer (Cursor.SE_RESIZE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.SW_RESIZE_CURSOR).getName(), new Integer (Cursor.SW_RESIZE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.TEXT_CURSOR).getName(), new Integer (Cursor.TEXT_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.W_RESIZE_CURSOR).getName(), new Integer (Cursor.W_RESIZE_CURSOR));
CURSOR_TYPES.put (new Cursor (Cursor.WAIT_CURSOR).getName(), new Integer (Cursor.WAIT_CURSOR));
CURSOR_CONSTANTS.put (new Integer (Cursor.CROSSHAIR_CURSOR), "java.awt.Cursor.CROSSHAIR_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.DEFAULT_CURSOR), "java.awt.Cursor.DEFAULT_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.E_RESIZE_CURSOR), "java.awt.Cursor.E_RESIZE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.HAND_CURSOR), "java.awt.Cursor.HAND_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.MOVE_CURSOR), "java.awt.Cursor.MOVE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.N_RESIZE_CURSOR), "java.awt.Cursor.N_RESIZE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.NE_RESIZE_CURSOR), "java.awt.Cursor.NE_RESIZE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.NW_RESIZE_CURSOR), "java.awt.Cursor.NW_RESIZE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.S_RESIZE_CURSOR), "java.awt.Cursor.S_RESIZE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.SE_RESIZE_CURSOR), "java.awt.Cursor.SE_RESIZE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.SW_RESIZE_CURSOR), "java.awt.Cursor.SW_RESIZE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.TEXT_CURSOR), "java.awt.Cursor.TEXT_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.W_RESIZE_CURSOR), "java.awt.Cursor.W_RESIZE_CURSOR"); // NOI18N
CURSOR_CONSTANTS.put (new Integer (Cursor.WAIT_CURSOR), "java.awt.Cursor.WAIT_CURSOR"); // NOI18N
}
Cursor current;
/** Creates new CursorEditor */
public CursorEditor() {
current = new Cursor (Cursor.DEFAULT_CURSOR);
}
public Object getValue () {
return current;
}
public void setValue (Object value) {
if (value == null) return;
if ( value instanceof Cursor) {
current = (Cursor) value;
firePropertyChange();
} else {
throw new IllegalArgumentException();
}
}
public String getAsText () {
if (current == null)
return "null"; // NOI18N
else
return current.getName();
}
public void setAsText (String string) {
Object o = CURSOR_TYPES.get(string);
if (o != null) {
int type = ((Integer) o).intValue ();
setValue (new Cursor (type));
}
}
public boolean supportsEditingTaggedValues () {
return true;
}
public String[] getTags () {
String [] tags = new String[CURSOR_TYPES.size()];
int i=0;
for (java.util.Iterator iter = CURSOR_TYPES.keySet().iterator(); iter.hasNext(); i++)
tags [i] = (String) iter.next();
return tags;
}
public boolean hasInPlaceCustomEditor () {
return false;
}
public Component getInPlaceCustomEditor () {
return null;
}
public boolean supportsCustomEditor () {
return true;
}
public Component getCustomEditor () {
return new CursorPanel (current);
}
public String getJavaInitializationString () {
if (current == null) return null; // no code to generate
String cursorName = (String) CURSOR_CONSTANTS.get (new Integer (current.getType()));
if (cursorName != null)
return "new java.awt.Cursor ("+cursorName+")"; // NOI18N
return "new java.awt.Cursor ("+current.getType()+")"; // NOI18N
}
class CursorPanel extends JPanel implements EnhancedCustomPropertyEditor {
CursorPanel (Cursor value) {
setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints1;
list = new JList (new java.util.Vector (CURSOR_TYPES.keySet()));
list.setSelectionMode (javax.swing.ListSelectionModel.SINGLE_SELECTION);
if (value != null)
list.setSelectedValue(value.getName(), true);
gridBagConstraints1 = new java.awt.GridBagConstraints ();
gridBagConstraints1.gridx = 0;
gridBagConstraints1.gridy = 1;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets (8, 8, 8, 8);
gridBagConstraints1.weightx = 1.0;
gridBagConstraints1.weighty = 1.0;
add (list, gridBagConstraints1);
gridBagConstraints1 = new java.awt.GridBagConstraints ();
gridBagConstraints1.gridx = 0;
gridBagConstraints1.gridy = 0;
gridBagConstraints1.insets = new java.awt.Insets (8, 8, 0, 8);
gridBagConstraints1.anchor = java.awt.GridBagConstraints.WEST;
add (new JLabel (org.openide.util.NbBundle.getBundle (CursorEditor.class).getString ("CTL_SelectCursorName")), gridBagConstraints1);
}
public Object getPropertyValue () throws IllegalStateException {
if (list.getSelectedValue()==null) return null;
int type = ((Integer) CURSOR_TYPES.get(list.getSelectedValue())).intValue ();
return new Cursor (type);
}
private JList list;
}
//--------------------------------------------------------------------------
// XMLPropertyEditor implementation
public static final String XML_CURSOR = "Color"; // NOI18N
public static final String ATTR_ID = "id"; // NOI18N
/** Called to load property value from specified XML subtree. If succesfully loaded,
* the value should be available via the getValue method.
* An IOException should be thrown when the value cannot be restored from the specified XML element
* @param element the XML DOM element representing a subtree of XML from which the value should be loaded
* @exception IOException thrown when the value cannot be restored from the specified XML element
*/
public void readFromXML (org.w3c.dom.Node element) throws java.io.IOException {
if (!XML_CURSOR.equals (element.getNodeName ())) {
throw new java.io.IOException ();
}
org.w3c.dom.NamedNodeMap attributes = element.getAttributes ();
try {
String id = attributes.getNamedItem (ATTR_ID).getNodeValue ();
setAsText (id);
} catch (NullPointerException e) {
throw new java.io.IOException ();
}
}
/** Called to store current property value into XML subtree. The property value should be set using the
* setValue method prior to calling this method.
* @param doc The XML document to store the XML in - should be used for creating nodes only
* @return the XML DOM element representing a subtree of XML from which the value should be loaded
*/
public org.w3c.dom.Node storeToXML(org.w3c.dom.Document doc) {
org.w3c.dom.Element el = doc.createElement (XML_CURSOR);
el.setAttribute (ATTR_ID, getAsText ());
return el;
}
}
/*
* Log
* 5 Gandalf 1.4 1/14/00 Ian Formanek I18N
* 4 Gandalf 1.3 1/13/00 Ian Formanek NOI18N #2
* 3 Gandalf 1.2 12/17/99 Pavel Buzek support for saving into
* XML
* 2 Gandalf 1.1 12/17/99 Pavel Buzek
* 1 Gandalf 1.0 12/17/99 Pavel Buzek
* $
*/